package cn.iluwen.airline.Services;

import cn.iluwen.airline.Entities.Administrator;
import cn.iluwen.airline.Mapper.AdminMapper;
import cn.iluwen.airline.utils.BCrypt;
import cn.iluwen.airline.utils.PageUtils;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 管理员服务类
 * 处理管理员相关的业务逻辑
 */
@Service
public class AdminService {
    
    @Autowired
    private AdminMapper adminMapper;
    
    /**
     * 管理员登录
     * @param username 用户名
     * @param password 密码
     * @return 管理员对象，登录失败则返回null
     */
    public Administrator login(String username, String password) {
        // 根据用户名查询管理员
        Administrator admin = adminMapper.findByUsername(username);
        if (admin == null) {
            throw new RuntimeException("用户名或密码错误");
        }
        
        // 验证密码
        if (!BCrypt.matches(password, admin.getPassword())) {
            throw new RuntimeException("用户名或密码错误");
        }
        
        return admin;
    }
    
    /**
     * 根据ID查询管理员
     * @param adminId 管理员ID
     * @return 管理员对象
     */
    public Administrator getAdminById(String adminId) {
        return adminMapper.findById(adminId);
    }
    
    /**
     * 根据用户名查询管理员
     * @param username 用户名
     * @return 管理员对象
     */
    public Administrator getAdminByUsername(String username) {
        return adminMapper.findByUsername(username);
    }
    
    /**
     * 获取所有管理员
     * @return 管理员列表
     */
    public List<Administrator> getAllAdmins() {
        return adminMapper.findAllAdmins();
    }
    
    /**
     * 分页获取所有管理员
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return 分页后的管理员列表
     */
    public PageInfo<Administrator> getAdminsWithPaging(int pageNum, int pageSize) {
        PageUtils.startPage(pageNum, pageSize);
        List<Administrator> admins = adminMapper.findAdminsWithPaging();
        return PageUtils.getPageInfo(admins);
    }
    
    /**
     * 根据用户名关键词分页查询管理员
     * @param username 用户名关键词
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return 分页后的管理员列表
     */
    public PageInfo<Administrator> getAdminsByUsernameLike(String username, int pageNum, int pageSize) {
        PageUtils.startPage(pageNum, pageSize);
        List<Administrator> admins = adminMapper.findAdminsByUsernameLike(username);
        return PageUtils.getPageInfo(admins);
    }
} 